home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 8: LINUX Games / Linux Cubed Series 8 - LINUX Games.iso / games / video / zapem-0.000 / zapem-0 / zapem / menu.cc < prev    next >
C/C++ Source or Header  |  1995-05-12  |  2KB  |  134 lines

  1. #include "screen.h"
  2. #include "sprite.h"
  3. #include "block.h"
  4. #include "control.h"
  5. #include "menu.h"
  6. #include "font.h"
  7. #include "slots.h"
  8.  
  9. Menu::Menu(char **text, int length) : textptr(text), numitems(length)
  10. {
  11.     current_item=0;
  12.     int xmax=0;
  13.     for(int i=0; i<length; i++)
  14.     {
  15.         if(strlen(textptr[i])>xmax) xmax=strlen(textptr[i]);
  16.     }
  17.     ystart=(getScreenHeight()-(numitems+1)*8)/2;
  18.     xstart=(getScreenWidth()-xmax*8)/2;
  19.     yend=ystart+(numitems)*8;
  20.     xend=xstart+xmax*8;
  21.     
  22.     arrow.gifLoadAndCut("gfx/arrow.gif",MENUSLOT);
  23.     arrow.setPos(xstart-arrow.getWidth(),ystart-4);
  24.     arrow.setVisible(true);
  25.     arrow2.gifLoadAndCut("gfx/arrow2.gif",MENUSLOT+1);
  26.     arrow2.setPos(xend,ystart-4);
  27.     arrow2.setVisible(true);
  28. }
  29.  
  30. // returns choice, or 255 if fire is not pressed
  31. int
  32. Menu::choice(void)
  33. {
  34.     if(control->test(FIRE1))
  35.         return current_item;
  36.     else
  37.         return 255;
  38. }
  39.  
  40. void
  41. Menu::setControl(Control *c)
  42. {
  43.     control=c;
  44. }
  45.  
  46. void
  47. Menu::move(void)
  48. {
  49.     static int last=0;
  50.  
  51.     arrow.setVisible(true);
  52.     arrow2.setVisible(true);
  53.     control->fetch();
  54.     if(control->test(UP))
  55.     { 
  56.         if(last!=1)
  57.         {
  58.             current_item--; 
  59.             if(current_item<0)
  60.             {
  61.                 current_item=numitems-1;
  62.                 arrow.setPos(arrow.getXp(), yend-12);
  63.                 arrow2.setPos(arrow2.getXp(), yend-12);
  64.             }
  65.             else
  66.             {
  67.                 arrow.move(0,-8);
  68.                 arrow2.move(0,-8);
  69.             }
  70.         }
  71.         last=1;
  72.     }
  73.     else if(control->test(DOWN))
  74.     { 
  75.         if(last!=2)
  76.         {
  77.             current_item++; 
  78.             if(current_item>=numitems)
  79.             { 
  80.                 current_item=0;
  81.                 arrow.setPos(arrow.getXp(), ystart-4);
  82.                 arrow2.setPos(arrow2.getXp(), ystart-4);
  83.             }
  84.             else
  85.             {
  86.                 arrow.move(0,8);
  87.                 arrow2.move(0,8);
  88.             }
  89.         }
  90.         last=2;
  91.     }
  92.     else 
  93.         last=0;
  94. }
  95.  
  96. void
  97. Menu::paste(void)
  98. {
  99.     int y=ystart;
  100.     for(int i=0; i<numitems; i++)
  101.     {
  102.         centre(textptr[i],y);
  103.         y+=8;
  104.     }
  105. }
  106.  
  107. void
  108. Menu::centre(char *t, int y)
  109. {
  110.     int x=(getScreenWidth()-(strlen(t)*8))/2;
  111.     printor(t,getGraphMem(),x,y);
  112. }
  113.  
  114. void
  115. Menu::getBack(void)
  116. {
  117.     back.cut(xstart,ystart,xend,yend);
  118. }
  119.  
  120. void
  121. Menu::replace(void)
  122. {
  123.     back.paste(xstart,ystart);
  124. }
  125.  
  126. void
  127. Menu::update(void)
  128. {
  129.     replace();
  130.     move();
  131.     getBack();
  132.     paste();
  133. }
  134.